package com.shuijianbaozi.mediaplayer;

import android.content.Intent;
import android.content.IntentFilter;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.SeekBar;

/***
 * 使用MediaPlayer +  Service + BroadcastReceiver + Notification实现简单播放器
 * Created by bodhixu on 2016/9/26.
 * MediaPlayer介绍：
 *    MediaPlayer是用来播放音频和视频的组件
 *    播放音频，一般和SeekBar配套使用
 *    播放视频，一般和SurfaceView配套使用，SurfaceView具有双缓存功能
 *    另外Android又封装了一种播放视频的方法，VideoView
 * 常用的开源控件:jiecaoPlayer, ijkPlayer(bilibili开源框架)
 */
public class MainActivity extends AppCompatActivity
        implements OnClickListener, SeekBar.OnSeekBarChangeListener, IUpdateListener{

    private SeekBar mSeekbarPlay; //播放器拖动条,用于展示控制播放进度

    private Button mBtnControl; //播放和暂停按钮

    private Button mBtnExit; //退出按钮

    private boolean isPlaying; // 是否正在播放

    private UpdateReceiver updateReceiver;// 广播接收器

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        //todo 1.0 动态注册广播
        updateReceiver = new UpdateReceiver(this);//-------传递回调接口对象
        IntentFilter filter = new IntentFilter(MyContstants.ACTION_BROADCAST_PROGRESS);
        registerReceiver(updateReceiver, filter);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //todo 4.0 解除广播的注册
        unregisterReceiver(updateReceiver);
    }

    private void initView() {//初始化控件 设置控件监听 实现监听接口
        mSeekbarPlay = (SeekBar) findViewById(R.id.skb_play);
        mSeekbarPlay.setOnSeekBarChangeListener(this);
        mBtnControl = (Button) findViewById(R.id.btn_control);
        mBtnExit = (Button) findViewById(R.id.btn_out);
        mBtnControl.setOnClickListener(this);
        mBtnExit.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btn_control://todo 2.0 按钮开启服务,通过intent传递信息
                Intent controlIntent = new Intent(MainActivity.this, PlayService.class);
                isPlaying = !isPlaying;//----------小技巧
                if (isPlaying) { //播放
                    mBtnControl.setText("暂停");
                    controlIntent.putExtra(MyContstants.KEY_CONTROL, MyContstants.ACTION_PLAY);
                } else { //暂停
                    mBtnControl.setText("播放");
                    controlIntent.putExtra(MyContstants.KEY_CONTROL, MyContstants.ACTION_PAUSE);
                }
                startService(controlIntent); //启动服务
                break;
            case R.id.btn_out: //todo 3.0 退出应用
                //播放 暂停 拖动 都属于启动服务; 此方法是停止服务 都是用intent操控
                Intent stopIntent = new Intent(MainActivity.this, PlayService.class);
                stopService(stopIntent);//停止服务

                finish();//退出布局
                break;
        }
    }
//////////////////////////////////////////////////////////////////////////
// seekBar的监听器回调方法,看参数辨别
///////////////////////////////////////////////////////////////////////////
    @Override
    public void onProgressChanged(SeekBar seekBar, int i, boolean b) {}

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {}

    //拖动控制			----seekbar开启服务
    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
        int progress = seekBar.getProgress(); //获得拖动后的进度
        Intent seekIntent = new Intent(this, PlayService.class);
        seekIntent.putExtra(MyContstants.KEY_CONTROL, MyContstants.ACTION_SEEK);
        seekIntent.putExtra(MyContstants.KEY_SEEK_PROGRESS, progress);
        startService(seekIntent);
    }


    @Override//回调接口触发的方法
    public void updateMediaPlayerProgress(int progress) {
        mSeekbarPlay.setProgress(progress); //更新拖动条进度
    }
}
